package com.cms.juc;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

//        E - Element (在集合中使用，因为集合中存放的是元素)
//        T - Type（Java 类）
//        K - Key（键）
//        V - Value（值）
//        N - Number（数值类型）
public class BlockingQueueDemo {
    public static void main(String[] args) throws Exception {
        /*
         * BlockingQueue 核心
         * 抛出异常
         * add() 队列满了，在进行add的时候会抛出java.util.IllegalStateException:Queue full
         * remove() 队列为空，在进行remove的时候会抛出java.util.NoSuchElementException
         * 特殊值
         * offer() 队列满了,在进行offer操作的时候，返回boolean
         * poll() 队列为空,在进行offer操作的时候，返回null
         * 阻塞
         * put() 队列满了,在进行put操作的时候,线程会一直被阻塞，知道队列中有空位置
         * take() 队列为空,在进行take操作的时候,线程会一直被阻塞，知道队列中有空位置
         * 超时
         * offer poll 队列满了或者队列为空，线程会一直被阻塞，超过设置的时限后，线程退出执行
         *
         *
         *
         */
        BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.add("ada"));
        System.out.println(blockingQueue.add("123"));
        System.out.println(blockingQueue.add("qwe"));
        // System.out.println(blockingQueue.add("sdf"));
        // System.out.println(blockingQueue.add("xcv"));
        // 先进先出
        // System.out.println(blockingQueue.remove());

        System.out.println(blockingQueue.element());
        blockingQueue.put("1");

    }
}
